package com.shp.service.serviceImpl;

import com.shp.dao.AdminDao;
import com.shp.pojo.Admin;
import com.shp.pojo.ResultInfo;
import com.shp.pojo.SystemMsg;
import com.shp.service.AdminService;
import com.shp.utils.DateUtil;
import com.shp.utils.OnlineUserUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpSession;

/**
 * Description:
 *
 * @author zwl
 * @version 1.0
 * @date 2020/3/15 20:02
 */
@Service(value = "adminService")
public class AdminServiceImpl implements AdminService {

    @Autowired
    private AdminDao adminDao;
    /**
     * 登陆检验
     *
     * @param info    ResultInfo
     * @param session HttpSession
     * @param admin   Admin
     * @return ResultInfo
     */
    @Override
    public ResultInfo checkLogin(ResultInfo info, HttpSession session, Admin admin) {
        //获取session中的验证码
        String code = session.getAttribute("checkCode").toString();
        //移除session中的验证码,保证一次性
        session.removeAttribute("checkCode");
        String username = admin.getUsername();
        //校验验证码
        if (code != null && code.equalsIgnoreCase(admin.getCheckCode())) {
            // 如果重复登陆，覆盖
            if(OnlineUserUtil.isOnline(username)){
                OnlineUserUtil.removeUserEmail(username);
                OnlineUserUtil.reduceSession(username);
            }
            // 如果管理员的登陆信息存在
            if(admin.getUsername() != null && admin.getPassword() != null){
                // 查询管理员
                Admin admin1 = adminDao.getAdmin(admin);
                if(admin1 != null){
                    // 管理员存在，保存到session
                    session.setAttribute("admin",admin1);
                    OnlineUserUtil.addAdmin(session);
                    OnlineUserUtil.addUserEmail(username);
                    info.setFlag(true);
                }
            }
            if(!info.isFlag()){
                info.setErrorMsg("账号或密码错误");
            }
        }else {
            info.setErrorMsg("验证码错误");
        }
        return info;
    }

    /**
     * 获取管理员信息
     *
     * @param adminId 管理员id
     * @return Admin
     */
    @Override
    public Admin getAdmin(Integer adminId) {
        return adminDao.getAdminById(adminId);
    }

    /**
     * 修改密码
     *
     * @param admin 密码信息
     * @return true代表修改成功；否则代表修改失败
     */
    @Override
    public boolean update(Admin admin) {
        return adminDao.update(admin) == 1;
    }

    /**
     * 保存发布的信息
     *
     * @param systemMsg SystemMsg
     * @return true代表保存成功；否则失败
     */
    @Override
    public boolean saveSys(SystemMsg systemMsg) {
        systemMsg.setStartTime(DateUtil.getNowTime());
        return adminDao.saveSys(systemMsg) == 1;
    }
}
